package com.nt.train.config;
import com.nt.train.dto.BeanAnno;
import com.nt.train.service.EchoService;
import com.nt.train.service.ListService;
import com.nt.train.service.condition.LinuxCondition;
import com.nt.train.service.condition.LinuxListServiceImpl;
import com.nt.train.service.condition.WindowsCondition;
import com.nt.train.service.condition.WindowsListServiceImpl;
import com.nt.train.service.impl.WebEchoService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @author hlf
 * @version 1.0
 * @date 2022/8/4 9:46
 */
@Configuration
public class BeanAnnoConfig {

    //默认启动方法
    @Bean(initMethod = "myInit", destroyMethod = "myDestroy")
    public BeanAnno getBeanAnno() {
        return new BeanAnno();
    }

//    private BeanAnno beanAnno;
//
//    @PostConstruct
//    public void start() {
//        beanAnno = new BeanAnno();
//        beanAnno.myInit();
//    }
//
//    @PreDestroy
//    public void destroy() {
//        beanAnno.myDestroy();
//    }


    /**
     * 一个接口多个实现类 注册bean 方式不一样
     * @Service / @Configuration+@bean
     * @Service 中，同时完成了两件事情：
    实现类的创建
    将实现类标识为 Bean
    在第二种方式中：

    实现类的创建：交给了单独的类
    将实现类标识为 Bean：通过接口名称和类的名称
    即方式二中将 Bean 的标识，和类的实现过程，进行了分离。

    在复杂的项目中，推荐使用第二种方式。

     @Profile("!dev")
     @Bean
     public EchoService echoService() {
     return new WebEchoService();
     }

     @Profile("dev")
     @Bean
     public EchoService mockEchoService() {
     return new MockWebEchoService();
     }

     */
    //@Profile("!dev")
    @Bean
    public EchoService echoService() {
        return new WebEchoService();
    }


}
